import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class PC here.
 * 
 * Este es el algoritmo especial para PC
 */
public class PC extends Actor
{
    private final static int IMAGE_COUNT= 4;
    //public int disparo = 1;
    public int invi= 50;
    private static GreenfootImage[] imgs;
    public int aux=0;
    public int aux3=0;
    public int aux2=0;
    public int poder=0;
    public int j=0;
    public int podbala=0;
    public int temp=0;
    public int chg=0;
    
    public PC()
    {
     init();
     setImage(imgs[0]);
    }
    
    public void act() 
    {
        Aspire w = (Aspire)getWorld();
        if(w.getNivel()<=4)
        {
         setImage(imgs[0]);
        if(w.cotpod()>0)
         getpoder();
        else
        if (getY()<=550)
        {
            j=getY()+2;
            setLocation(getX(),j);
            if(j<=1)
             setLocation(getX(),1);
             
        }
        else
         mover();
        if(invi<1)
         colisionene();
        else
        {
         invi--;
         setImage(imgs[1]);
        }
         Dispara();
         if(temp==20)
         {
            temp=0;
            podbala=0;
            }
        colisionpoder();
        chg=1;
        }
        if(chg==1&&w.getNivel()==5)
        {
        Greenfoot.playSound("change.wav");
        chg=20;
        }
        
        if(w.getNivel()==5)
        { setImage(imgs[2]);
          if(w.cotpod()>0)
           getpoder();
           else
           if (getY()!=50)
           {
           setLocation(getX(),50);
          }
          else
           movboss();
           if(invi<1)
           colisionjuga();
           else
           {
           invi--;
           setImage(imgs[3]);
           }
           disparobos();
           if(temp==20)
           {
            temp=0;
            podbala=0;
            }
           colisionpoder();
           if(w.getLivesPc()<=0)
           getWorld().removeObject(this);
        }
    }    
    
    /**
     * PC se mueve aleatoriamente
     */
    public void mover()
    {
        
        Aspire w = (Aspire)getWorld();
        if (aux<=w.getx()+1)
        {
            aux=getX()+2;
            if(aux >= getWorld().getWidth()-1)
             aux=0;
            setLocation(aux,getY());
        }
        
        if (aux>=w.getx()+1)
        {
            aux=getX()-2;
            if(aux <=1)
             aux=getWorld().getWidth()-1;
             setLocation(aux,getY());
        }
    }
    
    private synchronized static void init() 
    {
        if(imgs == null) {
            imgs = new GreenfootImage[IMAGE_COUNT];
            for (int i = 0; i < IMAGE_COUNT; i++)
            {
            imgs[i] = new GreenfootImage("pc"+ (i+1) + ".png");
            
        }
        }
    }
    
    /**
     * Checa si colisiono con algunos objectos
     */
    public void colisionene()
    {
        Aspire w = (Aspire)getWorld();
        Actor aste = getOneIntersectingObject(Asteroid.class);
        Actor ene = getOneIntersectingObject(Enemigo1.class);
        Actor ene2 = getOneIntersectingObject(Enemigo2.class);
        Actor ene3 = getOneIntersectingObject(Enemigo3.class);
        Actor bala = getOneIntersectingObject(BalaEne.class);
        if (aste!=null||ene!=null||ene2!=null||ene3!=null||bala!=null)
        {
           //getWorld().addObject( new Explosion(), getX(), getY() );
           //w.loseLife();
           invi=60;
        //if((w.getLives())<1)
        //{
          //  getWorld().removeObject(this);
         //   invi=0;
        //}
        
        }
    }
    
    /**
     * Checa si colisiono con algunos de los poderes.
     */
    public void colisionpoder()
    {
        Aspire w = (Aspire)getWorld();
        Actor poder1 = getOneIntersectingObject(Vidas.class);
        Actor poder2 = getOneIntersectingObject(Escudo.class);
        Actor poder3 = getOneIntersectingObject(Poderbala.class);
        if(poder1!=null)
        {
            getWorld().removeObject(poder1);
            w.countpod(-1); 
            w.addLifePc(1+chg);
        }
        if(poder2!=null)
        {
            getWorld().removeObject(poder2);
            invi=600;
            w.countpod(-1);
        }
        if(poder3!=null)
        {
            getWorld().removeObject(poder3);
            w.countpod(-1);
            podbala=1;
        }
    }
    
    /**
     * Va disparando aleatoriamente
     */
    public void Dispara()
    {
        int x=Greenfoot.getRandomNumber(90);
        if(x==30)
        {
         if(podbala==0)
         {
          getWorld().addObject(new Balapc(),getX(),getY());
          Greenfoot.playSound("Bullet1.wav");
         }
         else
         {
          getWorld().addObject(new bapc(),getX(),getY());
          Greenfoot.playSound("Bullet.wav");
          temp++;
         }
         //Greenfoot.playSound("Bullet.wav");
     
        }
        
    }
    
    /**
     * PC automaticamente le asignamos un poder
     */
    public void getpoder()
    {
        Aspire w = (Aspire)getWorld();
        if (aux>=w.getypod()-1)
        {
            aux=getY()-2;
            setLocation(getX(),aux);
            if(aux<=1)
             setLocation(getX(),getWorld().getHeight()-1);
             
        }
        
        if (aux<=w.getypod()-1)
        {
            aux=getY()+2;
            setLocation(getX(),aux);
            if(aux<=1)
             setLocation(getX(),1);
             
        }
        
        if (aux2>w.getxpod()+1)
        {
            aux2=getX()-2;
            if(aux2 >= getWorld().getWidth()-1)
             aux2=1;
            setLocation(aux2,getY());
            
        }
        
        if (aux2<w.getxpod()+1)
        {
            aux2=getX()+2;
            if(aux2 <=1)
             aux2=getWorld().getWidth()-1;
             setLocation(aux2,getY());
        }
        }
    
     /**
      * Checa si esta colisionando con la bala del jugador.
      */
    public void colisionjuga()
    {
        Aspire w = (Aspire)getWorld();
        Actor balaJug = getOneIntersectingObject(Balajug.class);
        Actor balapod = getOneIntersectingObject(Balapod.class);
        if (balaJug!=null)
        {
           w.loseLifePc(1);
           Greenfoot.playSound("hit.wav");
        }
        if (balapod!=null)
        {
           w.loseLifePc(3);
           Greenfoot.playSound("hit.wav");
        }
    }
    
    /**
     * En el nivel final se convierte en el enemigo final a vencer
     */
    public void movboss()
    { 
        if (aux3==1)
        {
            if(getX() >= getWorld().getWidth()-1)
            aux3=0;
            setLocation(getX()+2,getY());
        }
        
        if (aux3==0)
        {
            if(getX() <=1)
             aux3=1;
             setLocation(getX()-2,getY());
        }
    
    
    }
    
    /**
     * PC osea el boss discpara aleatoriamente
     */
    public void disparobos()
    {
        int x=Greenfoot.getRandomNumber(60);
        if(x==30)
        {
         if(podbala==0){
          getWorld().addObject(new BalaEne(),getX(),getY());
          Greenfoot.playSound("Bullet1.wav");}
         else
         {
          getWorld().addObject(new Balasup(),getX(),getY());
          Greenfoot.playSound("Bullet.wav");
          temp++;
         }
         //Greenfoot.playSound("Bullet.wav");
     
        }
        
    }
}